[アップデート] Amazon SNSのサブスクリプションにAmazon Kinesis Data Firehoseがサポートされました
こんにちは。サービスグループの武田です。
pub/sub形式のメッセージングサービス、Amazon SNSにアップデートがありました。SNSはメッセージの配信先としてAmazon SQSやAWS Lambda、メールが指定できましたが、新しくAmazon Kinesis Data Firehoseを指定できるようになりました。
やってみた
というわけでさっそくやってみました。手順は次の5ステップです。
- Firehoseの配信先となるS3バケットの作成
- FirehoseはRedshiftやElasticsearchなども選択できますが、今回はS3としました
- なお今回の手順ではS3バケットは作成済みとします
- Firehose配信ストリームの作成
- SNSトピックの作成
- SNSが使用するIAMサービスロールの作成
- SNSサブスクリプションの作成
S3バケットの作成については、特段設定などはないため今回は省略します。
Firehose配信ストリームの作成
Kinesisのページにアクセスし、Kinesis Data Firehose
を選択して[配信ストリームを作成]をクリック。
配信ストリームの名前はsns-integration-test
としました。
他はデフォルトのまま[Next]をクリック。
次の画面もすべてデフォルトで[Next]をクリック。
配信先の指定ではAmazon S3
を選択します。
FirehoseにアタッチするIAMロールが必要ですが、今回は既存のロールが存在しないため新しく作ってもらいます。選択できたら[Next]をクリック。
最後に設定の確認をし、問題なければ[Create delivery stream]をクリック。
配信ストリームが作成できました。
SNSトピックの作成
次にSNSのページにアクセスし、SNSトピックを作成します。
スタンダードトピックを選択し、トピック名はFirehoseTopic
としました。
SNSが使用するIAMサービスロールの作成
SNSからFirehoseに対してメッセージを書き込むための権限が必要です。具体的にはSNSからスイッチできるIAMサービスロールを作成し、そのロールに対して、Firehoseに書き込めるポリシーをアタッチします。
今回はSNSToFirehoseRole
という名前でIAMロールを作成し、ポリシーとしてAmazonKinesisFirehoseFullAccess
をアタッチしています。スクリーンショットは省略していますが、このロールの信頼関係としてsns.amazonaws.com
を指定しています。なお今回は検証目的なのでFullAccess
のポリシーをアタッチしていますが、実際には権限を絞ったポリシーをアタッチするべきです。
SNSサブスクリプションの作成
SNSトピックおよびFirehoseの作成ができましたので、Firehoseを宛先とするSNSサブスクリプションを作成します。
プロトコルは新しく追加されたAmazon Kinesis Data Firehose
を選択します。エンドポイントには先ほど追加したFirehose配信ストリームのARNを入力。なおプルダウン形式ではないため、配信ストリームの一覧画面でARNをコピーしてくるとよいでしょう。サブスクリプションロールのARNには先ほど作成したIAMサービスロールのARNを入力。こちらもプルダウン形式ではないためIAMロールの画面からARNをコピーしてきましょう。
メッセージを発行してみる
設定が完了しましたので、最後のSNSからメッセージを発行し、S3に保存されるか確認をしましょう。
SNSのページからFirehoseTopic
に対してメッセージを発行します。件名およびメッセージ本文は適当な文言を入力しましょう。
今回はFirehoseのバッファリング設定をデフォルトとしていたため、メッセージ発行から約5分後に、S3バケットにオブジェクトが作成されていました。
オブジェクトの中身を確認してみると、きちんとSNSメッセージとなっていました!
まとめ
これまでSNSメッセージをS3などに保存しようとした場合、一度Lambda関数をとおす必要がありました。今回のアップデートによりFirehoseがサポートしている宛先に対してよりシームレスに連携できます。SNSは昔からあるサービスのため利用しているシステムは多いと思われます。ぜひこの機会に既存のアーキテクチャを見直してみるのもよいのではないでしょうか。